/**
 * 
 */
package com.itmayiedu;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

/**
 * @author Administrator
 * @date 2019年5月2日
 */
@SpringBootApplication
public class ApplicationDemo extends SpringBootServletInitializer  {
	
	//如果打jar 包直接运行即可
	public static void main(String[] args) throws Exception {
		SpringApplication.run(ApplicationDemo.class, args);
	}

	@Override
	//如果打包成war包并在web容器中进行部署,则需要继承SpringBootServletInitializer类,覆盖其config(SpringApplicationBuilder)方法
	protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
		return builder;
	}

}

/*
对   SpringBootServletInitializer  的理解
使用嵌入式Servlet容器:
 　　　　优点:   简单,便携
　　　　 缺点:   默认不支持jsp,优化定制比较复杂
使用外置Servlet容器的步骤:
　　1  必须创建war项目,需要剑豪web项目的目录结构
　　2  嵌入式Tomcat依赖scope指定provided
　　3  编写SpringBootServletInitializer类子类,并重写configure方法

SpringBootServletInitializer的执行过程，简单来说就是通过SpringApplicationBuilder构建并封装SpringApplication对象，并最终调用SpringApplication的run方法的过程。
spring boot就是为了简化开发的，也就是用注解的方式取代了传统的xml配置。
SpringBootServletInitializer就是原有的web.xml文件的替代。
SpringBootServletInitializer可以使用外部的Servlet容器，使用步骤：
1.必须创建war项目，需要创建好web项目的目录。
2.嵌入式Tomcat依赖scope指定provided。
3.编写SpringBootServletInitializer类子类,并重写configure方法。

public class ServletInitializer extends SpringBootServletInitializer { 
    @Override  
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {  
        return application.sources(SpringBoot04WebJspApplication.class);  
    }  
}

4.启动服务器。

jar包和war包启动区别
    jar包:执行SpringBootApplication的run方法,启动IOC容器,然后创建嵌入式Servlet容器
　	war包:先是启动Servlet服务器,服务器启动Springboot应用(springBootServletInitizer),然后启动IOC容器
SpringBootServletInitializer实例执行onStartup方法的时候会通过createRootApplicationContext方法来执行run方法，接下来的过程就同以jar包形式启动的应用的run过程一样了，在内部会创建IOC容器并返回，只是以war包形式的应用在创建IOC容器过程中，不再创建Servlet容器了。

*/